package com.fund.utils;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis;

import java.util.Date;


/**
 * @author Tght
 * 一分钟一次的线程获取
 */
@Slf4j
public class MyRunable implements Runnable {


    private int startId;
    private int endId;
    private String[] arr;

    public MyRunable(int startId, int endId, String[] arr) {
        this.startId = startId;
        this.endId = endId;
        this.arr = arr;
    }

    public static Jedis init() {
        Jedis jedis = new Jedis("1.15.62.118", 6379);
        jedis.auth("Ab123@wcj");
        return jedis;
    }


    public void run() {
        JSONObject jsonObject;
        for (int i = this.startId; i < Math.min(this.endId, arr.length); i++) {
            try {
                jsonObject = FundUtils.getByFundCode_7Info(arr[i]);
            } catch (Exception e) {
                log.info("----------------------获取基金接口信息异常----------------------");
                throw new RuntimeException(e);
            }
            log.info(arr[i] + ":" + jsonObject.getString("name") + ":" + jsonObject.getString("gszzl") + "%");
            // 在这里将基金数据放入redis中，以list的方式
            // 一天的交易时间为9：30 - 11：30  and  13：00 - 15：00 共240分钟。也即是一个基金代码对应240条数据。
            // 第二日 9：30 之前删除。再重新创建list。（前提都是要满足交易日。）
            //存储 --- 当天日期：gsjz：code , jsonObject
            Jedis jedis = init();
            String gztime = jsonObject.getString("gztime");
            String timeToMin = AppDateUtil.timeToMin(gztime);
            String headKey = AppDateUtil.getDayTime() + ":" + "gsjz" + ":" + arr[i];
            String tailValue = jsonObject.toJSONString();
            log.info(headKey + "-----" + timeToMin + "-----" + tailValue);
            // 取出list类型
            Long list_len = jedis.llen(headKey);
            if (list_len != 0) {
                // 获取最后一个元素
                String valueLast = jedis.lrange(headKey, 0, 1).get(0);//(key,开始索引，结束索引)
                if (valueLast.contains(gztime)) {
                    log.info(headKey + "------已经存储了------现在累计存储数据 " + list_len + " 条-----------" + tailValue);
                    continue;
                }
                // 本次获取的时间
                Date dateGet = AppDateUtil.StringToDateMin(gztime);
                JSONObject object =JSONObject.parseObject(valueLast);
                String time = object.getString("gztime");
                // 缓存的最后一个时间
                Date dateEnd = AppDateUtil.StringToDateMin(time);
                if (AppDateUtil.DayNumMin(dateGet,dateEnd) <= 0){
                    log.info(headKey + "------获取的时间回溯------现在累计存储数据 " + list_len + " 条-----------" + tailValue);
                    continue;
                }
            }
            // 存储不同时间段的
            log.info(headKey + "||||||||||||---------数据存储---------||||||||||||" + tailValue);
            jedis.lpush(headKey, tailValue);
        }
    }
}
